package gandalf.model;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.servlet.http.HttpServletRequest;

@Entity
public class Dogodek implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String opis;
    private String naziv;
    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    private Lokacija lokacija;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date datum;
    @OneToMany(mappedBy = "dogodek", cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
    private List<Vstopnica> vstopnice;
    private boolean objavljen;
    private String kategorija;

    /**
     * Get the value of kategorija
     *
     * @return the value of kategorija
     */
    public String getKategorija() {
        return kategorija;
    }

    /**
     * Set the value of kategorija
     *
     * @param kategorija new value of kategorija
     */
    public void setKategorija(String kategorija) {
        this.kategorija = kategorija;
    }



    /**
     * Get the value of objavljen
     *
     * @return the value of objavljen
     */
    public boolean isObjavljen() {
        return objavljen;
    }

    /**
     * Set the value of objavljen
     *
     * @param objavljen new value of objavljen
     */
    public void setObjavljen(boolean objavljen) {
        this.objavljen = objavljen;
    }

    /**
     * Get the value of vstopnice
     *
     * @return the value of vstopnice
     */
    public List<Vstopnica> getVstopnice() {
        return vstopnice;
    }

    /**
     * Set the value of vstopnice
     *
     * @param vstopnice new value of vstopnice
     */
    public void setVstopnice(List<Vstopnica> vstopnice) {
        this.vstopnice = vstopnice;
    }

    /**
     * Get the value of datum
     *
     * @return the value of datum
     */
    public Date getDatum() {
        return datum;
    }

    public String getLepIzpisDatuma() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd. MMMM, yyyy");
        return sdf.format(datum);
    }

    /**
     * Set the value of datum
     *
     * @param datum new value of datum
     */
    public void setDatum(Date datum) {
        this.datum = datum;
    }

    /**
     * Get the value of lokacija
     *
     * @return the value of lokacija
     */
    public Lokacija getLokacija() {
        return lokacija;
    }

    /**
     * Set the value of lokacija
     *
     * @param lokacija new value of lokacija
     */
    public void setLokacija(Lokacija lokacija) {
        this.lokacija = lokacija;
    }

    /**
     * Get the value of id
     *
     * @return the value of id
     */
    public Long getId() {
        return id;
    }

    /**
     * Set the value of id
     *
     * @param id new value of id
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * Get the value of opis
     *
     * @return the value of opis
     */
    public String getOpis() {
        return opis;
    }

    /**
     * Set the value of opis
     *
     * @param opis new value of opis
     */
    public void setOpis(String opis) {
        this.opis = opis;
    }

    /**
     * Get the value of naziv
     *
     * @return the value of naziv
     */
    public String getNaziv() {
        return naziv;
    }

    /**
     * Set the value of naziv
     *
     * @param naziv new value of naziv
     */
    public void setNaziv(String naziv) {
        this.naziv = naziv;
    }

    @Override
    public String toString() {
       
        return "gandalf.model.Dogodek[id=" + id + "]";
       
    }

    public boolean checkAttributes(Map parameterMap) {

        if (!parameterMap.containsKey("opis")) {
            return false;
        }

        if (!parameterMap.containsKey("naziv")) {
            return false;
        }

        if (!parameterMap.containsKey("datum")) {
            return false;
        }

        if (!parameterMap.containsKey("kategorija")) {
            return false;
        }

        return true;

    }

    public Dogodek setAttributes(HttpServletRequest request) {

        

        Dogodek d = new Dogodek();
       

        if (!checkAttributes(request.getParameterMap())) {
            
            return null;
            
        }
       

        d.setNaziv(request.getParameter("naziv"));
       

        d.setOpis(request.getParameter("opis"));
        
        d.setObjavljen(request.getParameter("objavljen") != null ? true : false);
        
        d.setKategorija(request.getParameter("kategorija"));
       


        // parsamo datum oblike [dan.mesec.leto]
        Calendar c = new GregorianCalendar();
        String datumParameter = request.getParameter("datum").toString();
        
        int year = Integer.parseInt(datumParameter.split("\\.")[2]);
        
        int month = Integer.parseInt(datumParameter.split("\\.")[1]);
       
        int date = Integer.parseInt(datumParameter.split("\\.")[0]);
        
        int ura = Integer.parseInt(request.getParameter("ura"));
        
        int minute = Integer.parseInt(request.getParameter("minute"));
        


        c.set(year, month, date, ura, minute, 0);
        
        d.setDatum(c.getTime());
        

        return d;
    }

    
}
